﻿    template<typename... Values> class Tuple;
    template<> class Tuple<> {};

    template<typename Head, typename... Tail>
    class Tuple<Head, Tail...>
    {
        using composited = Tuple<Tail...>;
    public:
        Tuple() = default;
        Tuple(Head v, Tail... vtail)
            : tail_(vtail...), head_(v) {}
    public:
        Head& head() { return head_; }
        composited& tail() { return tail_; }
    protected:
        Head head_;
        composited tail_;
    };